#!/bin/env python

'''
Created on Feb 17, 2011

@author: kivson
'''
from optparse import OptionParser
import sys
from vo.arquivo import Arquivo
import getpass
from negocio import utilidades, hashs, ftpCripto,arquivos
from dao.genericDAO import GDAO
import os.path

def main():
    
    opcoes, argumentos =  ConfigParser()
    
    if len(argumentos) < 2:
        return
    try:
        ftp = ftpCripto.FTPCripto(argumentos[1]) 
    except:
        print "Erro ao acessar Ftp."
        return
    #print opcoes.usuario
    if opcoes.usuario is None:
        usuario = raw_input("User: ")
        print usuario
    else:
        usuario = opcoes.usuario
        
    if opcoes.senha is None:    
        senha = getpass.getpass("Senha: ")
    else:
        senha = opcoes.senha
    
    try:
        ftp.login(usuario, senha)
    except:
        print "Erro ao logar no Ftp."
        return
    #print argumentos
    busca = arquivos.BuscaArquivo(argumentos[0])
    listaDeArquivos = busca.pegaTodos()
    
    #print listaDeArquivos
    
    #banco, base = carregaBanco("banco.db")
    #atexit.register(banco.close)
    dao = GDAO()
    hasher = hashs.Md5Manager(listaDeArquivos, n = 1)
    saida = hasher.processa()
    totalDeArquivos = len(listaDeArquivos)
    print "Tabalhando com %d arquivos" % totalDeArquivos
    for i in xrange(totalDeArquivos):
        
        arquivo = saida.get()
        print "Trabalahndo com: %s" % arquivo
        
        ''' Caso  o Arquivo ja exista, CONTINUA'''

        arquivoExite = dao.existeArquivoMd5(arquivo)

        
        if arquivoExite:
            print "O arquivo jah esta no bando: %s" % arquivoExite 
            continue
        
        ftp = ftpCripto.FTPCripto(argumentos[1])
        ftp.login(usuario, senha)
        
        print "MD5: %s" % arquivo.md5
        
        ''' 
        Abre o NomeCompletoArquivo para ser transferido
        '''
        with file(arquivo.nomeCompleto(), "rb") as arq:
            
            if opcoes.verbose:
                status = utilidades.Status(arq)
            else:
                status = None
            
            print "Envindo: " 
            ftp.envia(arquivo, callback=status, blocksize = opcoes.bloco)
            
            dao.salva(arquivo)

            print "finish"
        ftp.close()
    print "Tudo Concluido!"
    #banco.close()

def ConfigParser():
    parser = OptionParser()
    parser.add_option("-u", "--user", dest="usuario",
                  help="usuario para o FTP.", metavar="FILE")
    parser.add_option("-p", "--passwd", dest="senha",
                  help="senha para o FTP.", metavar="SENHA")
    parser.add_option("-v", "--verbose", action="store_true",
                  dest="verbose", default=False,
                  help="Mostra mais informacoes")
    parser.add_option("--md5", action="store_true",
                  dest="md5", default=False,
                  help="Verifica pelo Md5, inves de apenas pelo nome")
    parser.add_option("-b", "--block", dest="bloco", default = 8192, type=int,
                  help="usuario para o FTP.", metavar="FILE")
    
    return parser.parse_args(sys.argv[1:])


    
if __name__ == '__main__':
    main()